//function doThing(x: { n: string }) { }
//class A {
//    static n: string;
//    n: string;
//    p = doThing(A); // OK
//}

//class B extends A {
//    p1 = doThing(A); // OK
//    p2 = doThing(B); // Not OK (B is missing 'n'), but should be
//}
//doThing(B); //OK

//class X {
//    static x: number;
//    x: number;
//    y: number;
//}

//function test(o: X) { }
//test(X); // fail
//test(new X()) // ok

//module M {
//    export class A { }
//    export class B extends A {
//        test() {
//            M.doSomething(0, [A, B]);
//        }
//    }

//    export var doSomething = (value: any, types: Function[] = null) => {
//    };
//}

//module MyModule {
//    /** Does something.
//    * @param {number} x A number.
//    */
//    export var someFunc: (x: number) => any = (x: number) => { }
//}
